package tp.igl;


/**
 *<b>
 * Segement est la class representant un Octet d'une Adresse 
 * </b>
 * <p>
 * Un segement prend que des valeur umérique entre 0 et 255.
 * </p>
 * 
 * @author Redouane
 * @see Adresse
 */
public class Segment {
    int valeur;

    /**
     * @param valeur un entie entre 0 et 255
     */
    public Segment(int valeur) {
         this.valeur=valeur; 
        
    }

    /**
     * Getter de l'attribut valeur
     * @return
     */
    public int getValeur() {
        return valeur;
    }

    /**
     * Setter de l'attribut valeur
     * @param valeur
     */
    public void setValeur(int valeur) {
        this.valeur = valeur;
    }
    
    /**
     * fait le ET logique entre les bits de des champ valeur de l'objet actuel et du paramètre seg
     * @param seg
     * @return  un Segment dont la valeur est le ET entre la valeur du Segment et celle de seg 
     */
    public Segment and(Segment seg){
        
            return new Segment(this.valeur&seg.getValeur());
        
    }
    
    /**
     * fait le NON du OU logique entre les bits de des champ valeur de l'objet actuel et du paramètre seg
     * @param seg   Segment avec lequel on veut faire NON OU
     * @return  retourne
     */
    public Segment orNot(Segment seg){
            return new Segment((this.valeur|~seg.getValeur())&255);
            // on fait le &255 ne pas dépasser 255 (pour que les bits dont la position est > 7 soit nulle
            // et donc avoir un resultat sur 8 octets )
        
    }
    
    /**
     * Redefinition de la methode toString()
     * @return une chaine contenant la valeur du Segment
     */
    @Override
    public String toString(){
         return Integer.toString(this.valeur);
    }
    
    /**
     *
     * @param addZero a vrai pour ajouter les zeros qui monque a gauche de chiffre( avoir 8 characteres)
     * @return la valeur de segment en binaire
     */
    public String toString(boolean addZero){
        if(addZero){
         String str=Integer.toBinaryString(this.valeur);
         int i;
         for(i=8-str.length();i>0;i--){
             str="0"+str;
         }
         return str;
        }
        else return this.toString();   
    }


    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Segment other = (Segment) obj;
        if (this.valeur != other.valeur) {
            return false;
        }
        return true;
    } 
}
